
Ext.define('Writer.Form', {
    extend: 'Ext.form.Panel',
    alias: 'widget.writerform',
    requires: ['Ext.form.field.Text'],
    initComponent: function(){
        Ext.apply(this, {
            activeRecord: null,
            iconCls: 'icon-proyecto',
            frame: true,
            title: 'Proyectos',
            defaultType: 'textfield',
            bodyPadding: 20,
            fieldDefaults: {
                anchor: '100%',
            },
            items: [{
                fieldLabel: 'Id',
                name: 'id',
                type: 'int',
                hidden: true,
            },{
                fieldLabel: '<b>Nombre</b>',
                fieldStyle: 'background-color: transparent; border: none; background-image: none;',
                name: 'nombre',
                itemId: 'f_nombre',
            },{
                fieldLabel: '<b>Nº Fases</b>',
                name: 'nroFases',
                type: 'int',
                fieldStyle: 'background-color: transparent; border: none; background-image: none;',
                itemId: 'f_nroFases',
            },{
                fieldLabel: 'Fecha Creacion',
                name: 'fechaCreacion',
                itemId: 'f_fechaCreacion',
                hidden: true,
            },{
                fieldLabel: '<b>Estado</b>',
                name: 'estado',
                fieldStyle: 'background-color: transparent; border: none; background-image: none;',
                itemId: 'f_estado',
            }, {
                fieldLabel: '<b>Descripcion</b>',
                fieldStyle: 'background-color: transparent; border: none; background-image: none;',
                name: 'descripcion',
                itemId: 'f_descripcion',
            }],
            dockedItems: [{
                xtype: 'toolbar',
                items: [{
                    itemId: 'idinfo-buscar',
                    iconCls: 'icon-checked',
                    text: '<b><font color="red">Campos habilitados para filtrado</font></b>',
                    //disabled: true,
                    hidden: true,
                    scope: this,
                    handler: this.onReset
                    
                },{
                    iconCls: 'icon-add',
                    itemId: 'create',
                    text: '<b>Crear</b>',
                    scope: this,
                    //disabled: true,
                    hidden: true,
                    handler: this.onCreate
                }, {
                    iconCls: 'icon-save',
                    itemId: 'save',
                    text: '<b>Guardar</b>',
                    hidden: true,
                    scope: this,
                    handler: this.onSave
                },  {
                    iconCls: 'icon-lider',
                    itemId: 'lider',
                    text: '<b>Lider</b>',
                    hidden: true,
                    scope: this,
                    disabled: true, 
                    handler: this.onLider
                },{}]
            },{
				weight: 1,
                xtype: 'toolbar',
                dock: 'bottom',
                items: ['->', {
                    iconCls: 'icon-delete',
                    itemId: 'delete',
                    hidden: true,
                    scope: this, 
                    disabled: true,
                    text: '<b>Eliminar</b>',
                    scope: this,
                    handler: this.onDelete
                },{
                    iconCls: 'icon-editar',
                    itemId: 'editar',
                    text: '<b>Editar</b>',
                    disabled: true,
                    hidden: true,
                    scope: this, 
                    handler: this.onEditar
                },{
                    iconCls: 'icon-add',
                    itemId: 'nuevo',
                    text: '<b>Nuevo</b>',
                    scope: this,
                    handler: this.onNuevo
                },{
                    iconCls: 'icon-buscar',
                    itemId: 'idbuscar',
                    text: '<b>Buscar</b>',
                    hidden: true,
                    scope: this,
                    handler: this.onBuscar
                },{
                    iconCls: 'icon-reset',
                    text: '<b>Reset</b>',
                    scope: this,
                    handler: this.onReset
                }]
            }]
        });
        this.callParent();
    },

    setActiveRecord: function(record){
        this.activeRecord = record;
        if (record) {
            if (!this.down('#editar').isDisabled()){
				this.down('#editar').show();			
			}			
            if (!this.down('#delete').isDisabled()){
				this.down('#delete').show();			
			}
			if (!this.down('#lider').isDisabled()){
				this.down('#lider').show();			
			} 
            this.down('#nuevo').hide(); 
            this.down('#create').hide(); 
            this.down('#idbuscar').hide();
            this.down('#save').hide();
            this.down('#idinfo-buscar').hide();
            this.down('#f_descripcion').show();   
            this.down('#f_nroFases').show();  
            this.down('#f_estado').show();        
            this.down('#f_nroFases').setFieldStyle('background-color: transparent; border: none; background-image: none;');
			this.down('#f_estado').setFieldStyle('background-color: transparent; border: none; background-image: none;');
			this.down('#f_nombre').setFieldStyle('background-color: transparent; border: none; background-image: none;'); 
			this.down('#f_descripcion').setFieldStyle('background-color: transparent; border: none; background-image: none;'); 
            this.getForm().loadRecord(record);
        } else {
            this.down('#editar').hide();
            this.down('#save').hide();
            this.down('#delete').hide();
            this.down('#lider').hide();
            this.down('#create').hide(); 
            if (!this.down('#nuevo').isDisabled()){
				this.down('#nuevo').show();			
			}
            this.down('#idbuscar').hide();
			this.down('#idinfo-buscar').hide();
			this.down('#f_descripcion').show();
			this.down('#f_nroFases').show();  
            this.down('#f_estado').show(); 
            this.down('#f_descripcion').setFieldStyle('background-color: transparent; border: none; background-image: none;'); 
            this.getForm().reset();
        }
    },
    
    onNuevo: function(){
		this.getForm().reset();
		this.down('#create').show();
		this.down('#nuevo').hide(); 
		this.down('#f_nombre').setFieldStyle('background-color: #fff; border: 1px dotted;');
		this.down('#f_descripcion').setFieldStyle('background-color: #fff; border: 1px dotted;');
		this.down('#f_nroFases').hide();
		this.down('#f_estado').hide();
				
    },

    onSave: function(){
        var form = this.getForm();
                    form.submit({                        
                        url: 'modificarProyecto',
                        params: {	submit: 'submit'	},
						method: "post",
                       success: function(form, action) {
								this.down('#f_nroFases').show();
								this.down('#f_estado').show();
								this.down('#f_nombre').setFieldStyle('background-color: transparent; border: none; background-image: none;'); 
								this.down('#f_descripcion').setFieldStyle('background-color: transparent; border: none; background-image: none;'); 
							    Ext.Msg.show({  
									title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
									msg: 'Proyecto modificado satisfactoriamente', //<- El mensaje  
									icon: 'ext-mb-ok',
								});
							this.fireEvent('refresh');							                       
                        },
                        scope: this,                        
                        failure: function(form, action) {									
									Ext.Msg.show({  
										title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
										msg: 'No se ha podido modificar el proyecto', //<- El mensaje  
										icon: 'ext-mb-error',
									});
                        }
                    });
    },
    
    onEditar: function(){
		this.down('#lider').hide();
		this.down('#delete').hide();
		this.down('#editar').hide();
		this.down('#save').show();
		this.down('#f_nroFases').hide();
		this.down('#f_estado').hide();
		this.down('#f_nombre').setFieldStyle('background-color: #fff; border: 1px dotted;');
		this.down('#f_descripcion').setFieldStyle('background-color: #fff; border: 1px dotted;');
		
    },
    
	onLider: function(){
			var form = this.getForm();
			this.fireEvent('ddlider', form.getValues(true));            
	},
	
    onCreate: function(){
        var form = this.getForm();
                    form.submit({                        
                        url: 'crearProyecto',
                        params: {	submit: 'submit'	},
						method: "post",
                       success: function(form, action) {
								form.reset();
							    Ext.Msg.show({  
									title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
									msg: 'Proyecto creado satisfactoriamente', //<- El mensaje  
									icon: 'ext-mb-ok',
								});
							this.fireEvent('refresh');							                       
                        },
                        scope: this,                        
                        failure: function(form, action) {									
									Ext.Msg.show({  
										title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
										msg: 'No se ha podido crear el proyecto', //<- El mensaje  
										icon: 'ext-mb-error',
									});
                        }
                    });
    },

    onDelete: function(){ 
        var form = this.getForm();
                    form.submit({                        
                        url: 'eliminarProyecto',
                        params: {	submit: 'submit'	},
						method: "post",
                       success: function(form, action) {
								form.reset();
							    Ext.Msg.show({  
									title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
									msg: 'Proyecto eliminado satisfactoriamente', //<- El mensaje  
									icon: 'ext-mb-ok',
								});
							this.fireEvent('refresh');							                       
                        },
                        scope: this,                        
                        failure: function(form, action) {									
									Ext.Msg.show({  
										title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
										msg: 'No se ha podido eliminar el proyecto', //<- El mensaje  
										icon: 'ext-mb-error',
									});
                        }
                    });
    },

    onReset: function(){
        this.setActiveRecord(null);
        this.getForm().reset();
        this.fireEvent('reset');
        this.down('#f_nroFases').setFieldStyle('background-color: transparent; border: none; background-image: none;');
		this.down('#f_estado').setFieldStyle('background-color: transparent; border: none; background-image: none;');
		this.down('#f_nombre').setFieldStyle('background-color: transparent; border: none; background-image: none;');
    },
    onFiltrar: function(){
		this.getForm().reset();
		this.down('#nuevo').hide();
		this.down('#create').hide();
		this.down('#idbuscar').show();
		this.down('#idinfo-buscar').show();
		this.down('#f_descripcion').hide(); 
		this.down('#f_nroFases').show();
		this.down('#f_estado').show();
		this.down('#editar').hide();
		this.down('#delete').hide();
		this.down('#lider').hide();
		this.down('#idbuscar').hide();
		this.down('#f_nroFases').setFieldStyle('background-color: #fff; border: 1px dotted;');
		this.down('#f_estado').setFieldStyle('background-color: #fff; border: 1px dotted;');
		this.down('#f_nombre').setFieldStyle('background-color: #fff; border: 1px dotted;');
						
    },
    
    onBuscar: function(){
		var form = this.getForm();
		this.fireEvent('buscar', form.getValues(true));
						
    },
    onListar: function(){
		this.fireEvent('listar');
						
    }   
       
});

Ext.Loader.setConfig({enabled: true});
Ext.Loader.setPath('Ext.ux', 'static/ux');

Ext.define('Writer.Grid', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.writergrid',
    requires: [
        'Ext.form.field.Text',
        'Ext.ux.grid.FiltersFeature',
        'Ext.toolbar.TextItem'
    ],
    initComponent: function(){
        
		var filters = {
			ftype: 'filters',
			local: true,

		};

        Ext.apply(this, {
            iconCls: 'icon-grid',
            //frame: true,
            features: [filters],
            dockedItems: [{ 
                weight: 1,
                xtype: 'toolbar',
                dock: 'bottom',
                //ui: 'footer',
                items: ['->', {
                    iconCls: 'icon-buscar',
                    text: '<b>Buscar</b>',
                    tooltip:'Buscar Items',
                    scope: this,
                    handler: this.onBuscar
                },{
                    iconCls: 'icon-lista',
                    text: '<b>ListarTodo</b>',
                    tooltip:'Listar todos los proyectos',
                    scope: this,
                    handler: this.onListar
                }, {
                    iconCls: 'icon-refresh',
                    text: '<b>Actualizar</b>',
                    scope: this,
                    handler: this.onRefresh
                }]
            }],
            columns: [{
                text: 'Id',
                width: 30,
                hidden: true,
                //filter: true,
                dataIndex: 'id'
            },{
                header: '<b>Nombre</b>',
                flex: 1,
                filter: true,
                dataIndex: 'nombre',

            }, {
                header: '<b>Descripcion</b>',
                width: 150,
                filter: true,
                dataIndex: 'descripcion',

            },{
                text: '<b>Nº Fases</b>',
                flex: 1,
                filter: true,
                dataIndex: 'nroFases'
            },{
                header: '<b>Fecha Creacion</b>',
                flex: 1,
                filter: true,
                dataIndex: 'fecha',

            }, {
                header: '<b>Estado</b>',
                flex: 1,
                filter: true,
                dataIndex: 'estado',

            }]
        });
        this.callParent();
        this.getSelectionModel().on('selectionchange', this.onSelectChange, this);
    }, 
    onListar: function(){
		this.fireEvent('listarTodo');
		/*this.getSelectionModel().clearSelections();
		this.store.load();*/
    },
    
    onBuscar: function(){
		this.getSelectionModel().clearSelections();
		this.fireEvent('buscar');
		
		
    },   

    onRefresh: function(){
		this.getSelectionModel().clearSelections();
		this.store.load();
	}
});

Ext.define('Writer.Person', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        type: 'int',
        useNull: true
    },{
        name: 'nroFases',
        type: 'int',
    }, 'nombre', 'descripcion', 'fecha', 'estado'],
    validations: [{
        type: 'length',
        field: 'email',
        min: 1
    }, {
        type: 'length',
        field: 'first',
        min: 1
    }, {
        type: 'length',
        field: 'last',
        min: 1
    }, {
        type: 'length',
        field: 'nombreUsuario',
        min: 1
    }]
});

Ext.define('Writer.Fases', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        type: 'int',
        useNull: true
    },{
        name: 'nroItems',
        type: 'int',
    },{
        name: 'idProyectoFase',
        type: 'int',
    },{
        name: 'nroLBs',
        type: 'int',
    },{
        name: 'posicionFase',
        type: 'int',
    }, 'nombreFase', 'descripcion', 'estado']
});

Ext.define('Writer.TipoItem', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        type: 'int',
        useNull: true
    },{
        name: 'nroAtributos',
        type: 'int',
    },{
        name: 'idProyecto',
        type: 'int',
    }, 'nombre', 'descripcion']
});


Ext.require([
    'Ext.data.*',
    'Ext.tip.QuickTipManager',
    'Ext.window.MessageBox',
    'Ext.grid.*',
    'Ext.tab.*',
    'Ext.window.*',
    'Ext.tip.*',
    'Ext.layout.container.Border',
    'Ext.dd.*',
    'Ext.form.field.ComboBox',
    'Ext.form.FieldSet'
]);

Ext.define('DataUsuario', {
    extend: 'Ext.data.Model',
    fields: ['nombreUsuario']
});

Ext.define('DataTipoItem', {
    extend: 'Ext.data.Model',
    fields: [{
			name: 'id',
			type: 'int'
		},'nombreTipoItem']
});

Ext.define('DataFase', {
    extend: 'Ext.data.Model',
    fields: [{
			name: 'id',
			type: 'int'
		},'nombreFase']
});

Ext.onReady(function(){
    Ext.tip.QuickTipManager.init();
    
    function getPermisos()
	{
		Ext.Ajax.request({
				url: 'listarPermisos_Logueado',
				method: 'GET',
				success: function(response) {
					var jsonData = Ext.JSON.decode(response.responseText);
					var resultMessage = jsonData['data'];
					if(extraer(resultMessage,'{','crear-proyecto')){	
						win.child('#form').down('#nuevo').enable();
						win.child('#form').down('#nuevo').show();
					}
					if(extraer(resultMessage,'{','eliminar-proyecto')){	
						win.child('#form').down('#delete').enable();
						
					}
					if(extraer(resultMessage,'{','modificar-proyecto')){	
						win.child('#form').down('#editar').enable();
						
					}
					if(extraer(resultMessage,'{','asignar-lider-proyecto')){	
						win.child('#form').down('#lider').enable();
						
					}
					
				}
		});
	}
    
    var store = Ext.create('Ext.data.Store', {
        model: 'Writer.Person',
        autoLoad: true,
        autoSync: true,
        proxy: {
            type: 'ajax',
            url: 'listarProyectosAdmininstrador',
            reader: {
                type: 'json',
                successProperty: 'success',
                root: 'data',
                messageProperty: 'message'
            },
            writer: {
                type: 'json',
                writeAllFields: false,
                root: 'data'
            },

        },
        listeners: {
            write: function(proxy, operation){
                if (operation.action == 'destroy') {
                    main.child('#form').setActiveRecord(null);
                }
                Ext.example.msg(operation.action, operation.resultSet.message);
            }
        },
        
        sorters: [{
            property: 'id',
            direction: 'ASC'
        }]        
    });    
            win = Ext.create('widget.panel', {
				renderTo: 'comboProyecto',
				frame: true,
				iconCls: 'icon-alpha',
				title: 'ADMINISTRACION - PROYECTOS',
                width: 1050,  height: 390,
                layout: 'border',
                //bodyStyle: 'padding: 3px;',	
                y: 30,	x: 160,
                items: [{
                    region: 'west',
					xtype: 'writerform',
					itemId: 'form',
					width: 360,
					listeners: {
						refresh: function() {
							win.child('#grid').onRefresh();
							
						},
						reset: function() {
							win.child('#grid').getSelectionModel().clearSelections();
							
						},
						buscar: function(data) {
							nombre = extraer(data, '&nombre=', '&nroFases=');
							nroFases= extraer(data, '&nroFases=', '&fechaCreacion='); fechaCreacion= extraer(data, '&fechaCreacion=', '&estado=');
							estado= extraer(data, '&estado=', '&descripcion='); 
							
							/*Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
												msg: estado, 	icon: 'ext-mb-ok',
										});*/
							if(nombre==='') nombre='nulo';
							if(fechaCreacion==='') fechaCreacion='nulo';
							if(estado==='') estado='nulo';
							if(nroFases==='') nroFases='9999';
							win.child('#grid').store.setProxy({
																type: 'ajax',
																url: 'buscar_proyectos/' + nombre + '/' + nroFases + '/' + fechaCreacion + '/' + estado ,
																reader: {
																	type: 'json',
																	successProperty: 'success',
																	root: 'data',
																	messageProperty: 'message'
																},
															
															});
							win.child('#grid').onRefresh();
							
						},
						listar: function() {
							
							win.child('#grid').store.setProxy({
																type: 'ajax',
																url: 'listarProyectos',
																reader: {
																	type: 'json',
																	successProperty: 'success',
																	root: 'data',
																	messageProperty: 'message'
																},
															
															});
							win.child('#grid').onRefresh();
							
						},
						ddLider: function(data){
							var grid1, grid2;
							nombre = extraer(data, '&nombre=', '&nroFases=');		id = extraer(data, 'id=', '&');
                            win2 = Ext.create('widget.window', {
								iconCls: 'icon-lider',
								x: 500, y: 260,
								title: 'Drag & Drop - Lider de Proyecto: ' + nombre,
								closable: false,	plain: true,
								layout: 'fit',
								items: [displayPanel = Ext.create('Ext.Panel', {
											width : 270,	height : 220,
											layout  : {	type: 'hbox',	align: 'stretch'	},
											defaults  : { flex : 1 }, 
											items : [
													grid1 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														hidden:true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'firstGridDDGroup',
																	dropGroup: 'secondGridDDGroup'
															},
														},
														store: Ext.create('Ext.data.Store', {
																	model: 'DataUsuario',
																	autoLoad: true,
																	proxy: {
																		type: 'ajax',
																		url: 'listarUsuarios_conRolLider/'+ id,
																		reader: {
																			type: 'json',
																			successProperty: 'success',
																			root: 'data',
																			messageProperty: 'message'
																		},

																	}      
																}),
														columns:  [ {text: "<b>Lideres de Proyecto</b>", flex: 1, sortable: true, dataIndex: 'nombreUsuario'} ],
														stripeRows : true
													}),
													grid2 = Ext.create('Ext.grid.Panel', {
														multiSelect: true,
														viewConfig: {
															plugins: {
																	ptype: 'gridviewdragdrop',
																	dragGroup: 'secondGridDDGroup',
																	dropGroup: 'firstGridDDGroup'
																},
														},
														store: Ext.create('Ext.data.Store', {
																model: 'DataUsuario',
																autoLoad: true,
																proxy: {
																	type: 'ajax',
																	url: 'mostrarLider_actual/'+ id,
																	reader: {
																		type: 'json',
																		successProperty: 'success',
																		root: 'data',
																		messageProperty: 'message'
																	},

																}       
														}),
														columns  : [ {text: "<b>Lider Asignado</b>", flex: 1, sortable: true, dataIndex: 'nombreUsuario'} ],
														stripeRows : true
													})
											],
											dockedItems: {
												xtype: 'toolbar',
												dock: 'bottom',
												items: ['->', 												
												{
													text: 'Asignar',
													iconCls: 'icon-izq',
													handler: function(){
														this.up('panel').setWidth(520);
														grid1.show();
														this.hide();
														displayPanel.down('#save').show();
													}
												},{	text: 'Guardar',
													iconCls: 'icon-save',
													itemId: 'save',
													hidden:true,
													handler: function(){
														grid2.getSelectionModel().selectAll();
														longitud= grid2.getSelectionModel().getSelection().length;
														if (longitud > 1){
															Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																					msg: 'Solo se puede asignar un Lider de Proyecto', 	icon: 'ext-mb-error',
																});
															grid2.getSelectionModel().deselectAll();
														}
														else{
															lista_usuarios = new Array(longitud);
															i=0;
															while(i < longitud)
															{											
																	lista_usuarios[i]=grid2.getSelectionModel().getSelection()[i].data['nombreUsuario'];
																	i=i+1;
															}	
															grid2.getSelectionModel().deselectAll();											
															Ext.Ajax.request({
																url: 'asignarLider_desdeABMProyecto',
																params: {
																	id_proy: id,
																	lista_usuarios:Ext.encode(lista_usuarios)
																},
																success: function(response) {
																	var jsonData = Ext.JSON.decode(response.responseText);
																	var resultMessage = jsonData['mensaje'];
																	Ext.Msg.show({ 		title: '<br><p align="center"><b>ALPHA MANAGER</b></p>', //<- el título del diálogo  
																						msg: resultMessage, 	icon: 'ext-mb-ok',
																	});	
																},
																failure: function() {
																	Ext.Msg.show({	title: '<br><p align="center"><b>ALPHA MANAGER</b></p>',   
																					msg: 'Error en la asignacion del lider de proyecto', 	icon: 'ext-mb-error',
																	});
																}
															})
														}
													}
												},
												{
													text: 'Cerrar',
													iconCls: 'icon-cerrar',
													handler: function(){win2.close()}
												}]
											}
									}),{
									border: false
								}]
							});					
							win2.show();						
						}						
					}
				}, {
                    region: 'center',
					xtype: 'writergrid',            
					itemId: 'grid',
					title: 'Lista de Proyectos',

					flex: 1,        
					//width: 750,
					//height: 380,

					store: Ext.create('Ext.data.Store', {
														model: 'Writer.Person',
														autoLoad: true,
														proxy: {
															type: 'ajax',
															url: 'listarProyectosAdmininstrador',
															reader: {
																type: 'json',
																successProperty: 'success',
																root: 'data',
																messageProperty: 'message'
															},
															
														},        
														
														sorters: [{
															property: 'id',
															direction: 'ASC'
														}]        
													}),
					listeners: {
						selectionchange: function(selModel, selected) {
							win.child('#form').setActiveRecord(selected[0] || null);
						},
						listarTodo: function() {
							win.child('#form').onListar();
							win.child('#form').onReset();
							
						},
						buscar: function() {
							win.child('#form').onFiltrar();
						}
					}
				}]
            });
            win.show();
            getPermisos();
    

    
});

function extraer(texto, etqini, etqfin){
		var ind0, ind1, parte ="";
		ind0 = texto.indexOf(etqini);
		if (ind0 >=0){
			ind1 = texto.indexOf(etqfin);
			if (ind1>ind0)
				parte = texto.substring(ind0+etqini.length, ind1);
		}
		return parte;
}
